﻿using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Media;

namespace Fighter.Screens
{
    /// <summary>
    /// Le menu d'options permet d'activer/désactiver la musique
    /// et de configurer les différentes touches pour le jeu.
    /// </summary>
    class OptionsMenuScreen : MenuScreen
    {
        #region Fields
        ContentManager contentTmp;
        MenuEntry musicMenuEntry;

        static string[] sounds = { "Activée", "Désactivée" };
        static int currentSound = 0;  

        #endregion

        #region Initialization


        /// <summary>
        /// Constructeur
        /// </summary>
        public OptionsMenuScreen()
            : base("Options")
        {
            // Création des entrées pour le menu
            musicMenuEntry = new MenuEntry(string.Empty);

            SetMusicMenuEntryText();

            MenuEntry commands = new MenuEntry("Commandes");
            MenuEntry back = new MenuEntry("Retour");

            // Ajout des évènements
            musicMenuEntry.Selected += MusicMenuEntrySelected;
            commands.Selected += CommandsMenuEntrySelected;
            back.Selected += OnCancel;

            // Ajout des entrées au menu
            MenuEntries.Add(musicMenuEntry);
            MenuEntries.Add(commands);
            MenuEntries.Add(back);
        }


        /// <summary>
        /// Remplit l'entrée "Musique" avec la bonne valeur :
        /// activée ou désactivée
        /// </summary>
        void SetMusicMenuEntryText()
        {
            musicMenuEntry.Text = "Musique : " + sounds[currentSound];
        }


        #endregion

        #region Handle Input


        /// <summary>
        /// Evènement lorsque l'option "Musique" a été choisie
        /// </summary>
        void MusicMenuEntrySelected(object sender, PlayerIndexEventArgs e)
        {
            currentSound = (currentSound + 1) % sounds.Length;
            // Si on choisit de mettre le son à Off
            if (currentSound == 1)
            {
                MediaPlayer.Stop();
            }
            else
            {
                if (contentTmp == null)
                {
                    contentTmp = new ContentManager(ScreenManager.Game.Services, "Content");
                }
                MediaPlayer.IsRepeating = true;
                MediaPlayer.Play(contentTmp.Load<Song>("Game/Sounds/Music"));
            }
            SetMusicMenuEntryText();
        }

        /// <summary>
        /// Evènement lorsque l'option "Commandes" a été choisie
        /// </summary>
        void CommandsMenuEntrySelected(object sender, PlayerIndexEventArgs e)
        {
            ScreenManager.AddScreen(new CommandsMenuScreen(), e.PlayerIndex);
        }

        /// <summary>
        /// Evènement lorsque l'option "Retour" a été choisie
        /// </summary>
        protected override void OnCancel(PlayerIndex playerIndex)
        {
            ExitScreen();
        }

        #endregion
    }
}
